package sige

import sige.*

class CaixaDiarioService {

    def fecharCaixa(CaixaDiario caixa) {
        caixa.dataDeFechamento = new Date()
        caixa.fechado = true
        def despesaDiversa = capturarPagamentos(caixa, new DespesaDiversa())
        def despesaFixa = capturarPagamentos(caixa, new DespesaFixa())
        def despesaVariavel = capturarPagamentos(caixa, new DespesaVariavel())
        caixa.despesaTotalDiaria = despesaDiversa + despesaFixa + despesaVariavel
        caixa.receitaTotalDiaria = capturarPagamentos(caixa, new Anuidade())
        caixa.sangriaTotalDiaria = capturarPagamentos(caixa, new Sangria())
        caixa.suprimentoTotalDiario = capturarPagamentos(caixa, new Suprimento())
        caixa.saldo = (caixa.receitaTotalDiaria + caixa.suprimentoTotalDiario) - (caixa.despesaTotalDiaria + caixa.sangriaTotalDiaria)
    }
    
    def reabrirCaixa(){
        CaixaDiario c = CaixaDiario.find{fechado == false}
        if(c){
            flash.message = message(code: 'caixaDiario.has-open.message')
            return
        }
        caixa.dataDeFechamento = null
        caixa.fechado = false
        caixa.despesaTotalDiaria = null
        caixa.receitaTotalDiaria = null
        caixa.sangriaTotalDiaria = null
        caixa.suprimentoTotalDiario = null
        caixa.saldo = null
    }
    
    private double capturarPagamentos(caixa, obj){
        double total = 0
        caixa.pagamentos.each{ pagamento ->
            if(pagamento.movimentacao.class == obj.class){
                total += pagamento.total
            }
        }
        total
    }
}
